package com.liubiao1.leetcode.array;
//斐波那契数，通常用 F(n) 表示，形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始，后面的每一项数字都是前面两项数字的和。也就是：
//
//
//F(0) = 0，F(1) = 1
//F(n) = F(n - 1) + F(n - 2)，其中 n > 1
//
//
// 给你 n ，请计算 F(n) 。
//
//
//
// 示例 1：
//
//
//输入：2
//输出：1
//解释：F(2) = F(1) + F(0) = 1 + 0 = 1
//
//
// 示例 2：
//
//
//输入：3
//输出：2
//解释：F(3) = F(2) + F(1) = 1 + 1 = 2
//
//
// 示例 3：
//
//
//输入：4
//输出：3
//解释：F(4) = F(3) + F(2) = 2 + 1 = 3
//
//
//
//
// 提示：
//
//
// 0 <= n <= 30
//
// Related Topics 数组
// 👍 215 👎 0


/**
 * @author mc0710
 */
public class Solution509 {


    /**
     * 解题思路： 滚动数组
     *
     * @param n 斐波拉契数列中的第几个数
     * @return 该数的值
     */
    public static int fib(int n) {
        if (n <= 0) {
            return 0;
        }
        if (n > 0 && n <= 2) {
            return 1;
        }
        int a = 0, b = 1, r = 1;
        for (int i = 3; i <= n; i++) {
            a = b;
            b = r;
            r = a + b;
        }

        return r;
    }

    public static void main(String[] args) {
        System.out.println(fib(3));
        System.out.println(fib(4));
        System.out.println(fib(5));
        System.out.println(fib(6));
        System.out.println(fib(7));
    }
}
